import request from '@/utils/request'

/**
 * 用户管理API服务
 */

/**
 * 获取用户分页列表
 * @param {Object} params 查询参数
 * @param {number} params.page 页码
 * @param {number} params.size 每页条数
 * @param {string} params.keyword 搜索关键词
 * @param {string} params.status 用户状态
 * @returns {Promise} 返回用户分页数据
 */
export const getUserPage = (params) => {
  return request({
    url: '/api/user/user/getUserPage',
    method: 'post',
    data: params
  })
}

/**
 * 获取所有用户列表
 * @returns {Promise} 返回用户列表
 */
export const getUserList = () => {
  return request({
    url: '/api/user/user/getUserList',
    method: 'post'
  })
}

/**
 * 根据ID获取用户详情
 * @param {string} id 用户ID
 * @returns {Promise} 返回用户详情
 */
export const getUserById = (id) => {
  return request({
    url: '/api/user/user/getUserById',
    method: 'post',
    params: { id }
  })
}

/**
 * 根据用户名获取用户
 * @param {string} username 用户名
 * @returns {Promise} 返回用户信息
 */
export const getUserByUsername = (username) => {
  return request({
    url: '/api/user/user/getUserByUsername',
    method: 'get',
    params: { username }
  })
}

/**
 * 添加或更新用户
 * @param {Object} userData 用户数据
 * @returns {Promise} 返回操作结果
 */
export const saveOrUpdateUser = (userData) => {
  return request({
    url: '/api/user/user/saveOrUpdate',
    method: 'post',
    data: userData
  })
}

/**
 * 批量删除用户
 * @param {Array<string>} ids 用户ID数组
 * @returns {Promise} 返回操作结果
 */
export const deleteUsers = (ids) => {
  return request({
    url: '/api/user/user/deleteUsers',
    method: 'post',
    data: ids
  })
}

/**
 * 更新用户状态
 * @param {string} id 用户ID
 * @param {number} status 用户状态 (0-禁用, 1-启用)
 * @returns {Promise} 返回操作结果
 */
export const updateUserStatus = (id, status) => {
  return request({
    url: '/api/user/user/updateUserStatus',
    method: 'post',
    data: { id, status }
  })
}

/**
 * 重置用户密码
 * @param {string} id 用户ID
 * @param {string} password 新密码
 * @returns {Promise} 返回操作结果
 */
export const resetUserPassword = (id, password) => {
  return request({
    url: '/api/user/user/resetPassword',
    method: 'post',
    data: { id, password }
  })
}

/**
 * 获取用户角色列表
 * @param {string} userId 用户ID
 * @returns {Promise} 返回角色列表
 */
export const getUserRoles = (userId) => {
  return request({
    url: '/api/user/userRole/getRolesByUserId',
    method: 'post',
    params: { userId }
  })
}

/**
 * 设置用户角色
 * @param {string} userId 用户ID
 * @param {Array<number>} roleIds 角色ID数组
 * @returns {Promise} 返回操作结果
 */
export const setUserRoles = (userId, roleIds) => {
  return request({
    url: '/api/user/userRole/setUserRoles',
    method: 'post',
    data: { userId, roleIds }
  })
}

/**
 * 用户登录
 * @param {Object} loginData 登录数据
 * @param {string} loginData.username 用户名
 * @param {string} loginData.password 密码
 * @returns {Promise} 返回登录结果
 */
export const login = (loginData) => {
  return request({
    url: '/api/user/auth/login',
    method: 'post',
    data: loginData
  })
}

/**
 * 用户注册
 * @param {Object} registerData 注册数据
 * @returns {Promise} 返回注册结果
 */
export const register = (registerData) => {
  return request({
    url: '/api/user/auth/register',
    method: 'post',
    data: registerData
  })
}

/**
 * 获取当前用户信息
 * @returns {Promise} 返回当前用户信息
 */
export const getCurrentUser = () => {
  return request({
    url: '/api/user/auth/current',
    method: 'get'
  })
}

/**
 * 用户登出
 * @returns {Promise} 返回登出结果
 */
export const logout = () => {
  return request({
    url: '/api/user/auth/logout',
    method: 'post'
  })
}

/**
 * 获取用户学习统计
 * @param {string} userId 用户ID
 * @returns {Promise} 返回学习统计信息
 */
export const getUserLearningStats = (userId) => {
  return request({
    url: '/api/user/statistics/learning',
    method: 'get',
    params: { userId }
  })
}

/**
 * 获取用户考试记录
 * @param {string} userId 用户ID
 * @returns {Promise} 返回考试记录列表
 */
export const getUserExamRecords = (userId) => {
  return request({
    url: '/api/user/exam/records',
    method: 'get',
    params: { userId }
  })
}

export default {
  getUserPage,
  getUserList,
  getUserById,
  getUserByUsername,
  saveOrUpdateUser,
  deleteUsers,
  updateUserStatus,
  resetUserPassword,
  getUserRoles,
  setUserRoles,
  login,
  register,
  getCurrentUser,
  logout,
  getUserLearningStats,
  getUserExamRecords
}